/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2025-04-06
 * Time: 22:35
 */
public class Main {
    public static void main(String[] args) {
        // 1. 使用常量串构造，String(String original)
        String original = "helloA";// 直接赋值，字面量存入字符串常量池
        String newStr = new String(original); // 强制在堆中创建新对象，内容拷贝original的值
        System.out.println(newStr);
         /* 注：
           original == newStr.intern() 为 true，因newStr.intern()返回常量池引用
           original.equals(newStr) 为 true，内容相同
           original == newStr 为 false，因地址不同 */

        // 2. 直接new String对象
        String s2 = new String("HelloC");
        System.out.println(s2);
        /* 注：
           1. 参数"HelloC"是字面量，会先存入常量池（若不存在）
           2. new操作在堆中创建新对象，s2引用堆地址
           3. s2.intern() == "HelloC" 为 true */

        //3. 使用字符数组构造
        char[] chars = {'J', 'a', 'v', 'a'};
        String s3 = new String(chars);// 拷贝数组内容创建新字符串
        System.out.println(s3);
        chars[0] = 'H';  // 修改原数组不会影响已创建的字符串
        System.out.println(s3);  // 仍输出Java

        // 4. 字节数组构造
        byte[] bytes = {65, 66, 67, 68}; // ASCII码对应的ABCD
        String s4 = new String(bytes);   // 使用平台默认字符集解码
        System.out.println(s4);  // 输出ABCD
    }
}
